Peer-to-peer (P2P) systems employ a network of nodes that communicate with each other in a decentralized manner, e.g., without the aid of a central server. Each node (e.g., an application or a device) in the peer-to-peer network may communicate with another node on the network through a direct connection, or each node may communicate indirectly using an intermediary node to relay communications to an intended node. Peer-to-peer networks may be created using an application program interface (API) that provides basic peer-to-peer functionality, such as graph creation functions, network maintenance functions, message flooding, transport protocols, etc. Thus, an application using a peer-to-peer API may, for example, create a peer-to-peer network, connect to the P2P network, and communicate with other nodes in the network using the functions provided by the peer-to-peer API.
Existing peer-to-peer APIs usually have only a single native transport protocol that may be used to interface with an entity wishing to connect to the network. This transport strategy may work in cases where all of the peer entities to be connected to the P2P system are capable of communicating with each other using the implemented native transport protocol. If this is not the case, however, this solution fails to provide a mechanism for connecting all participants together. For example, a single protocol may be unable to connect participants together when those participants are coupled to a network behind various firewalls, network address translators (NATs), etc., which require different specialized transport protocols.